import WebSocket from "ws";
import { useSetSign } from "../useRedis";
const { WEBSOCKET_PORT } = process.env;


const wss = new WebSocket.Server({ port: Number(WEBSOCKET_PORT ?? 8080) });

// 保存所有连接的客户端
const clients: WebSocket[] = [];

wss.on("connection", (ws: WebSocket) => {
  console.log("有新的连接");

  // 将新连接的客户端加入列表
  clients.push(ws);

  // 监听客户端发送的消息
  ws.on("message", (message: string) => {
    console.log(`收到消息: ${message}`);
    try {
      // 解析消息，如果是指定通知，则向所有客户端发送消息
      const data = JSON.parse(message);
      if (data.type === "setSign") {
        useSetSign(data.data);
      }
      if (data.type === "PING") {
        ws.send("PONG");
      }
    } catch (error) {
      console.log(error);
    }
  });

  // 客户端断开连接时，将其从列表中移除
  ws.on("close", () => {
    console.log("连接断开");
    removeClient(ws);
  });
});

// 向所有客户端发送通知消息
export function notifyAllClients() {
  if (clients.length) {
    clients.forEach((client) => {
      client.send("getSign");
    });
    return;
  }
  return new Error("暂无连接");
}

// 从客户端列表中移除指定客户端
function removeClient(ws: WebSocket) {
  const index = clients.indexOf(ws);
  if (index !== -1) {
    clients.splice(index, 1);
  }
}
